perm filename SND.FAI[MUS,LCS] blob
sn#079097 filedate 1974-01-08 generic text, type T, neo UTF8
00100 TITLE BUFFER; DOROTHY BENDER ****** GARPLY *******
00200
00300 ; ROUTINE TO READ THE OUTPUT FROM THE MUSIC
00400 ; PROGRAM AND CALL THE D-A CONVERTER TO PLAY.
00500 ;
00600 ; THE NAME OF THE FILE TO BE INPUTTED IS 'MUSIC',
00700 ; THE FIRST RECORD OF WHICH CONTAINS THE
00800 ; NUMBER OF WORDS OF DATA IN THE ENTIRE DISK FILE.
00900
01000 A ← 1 ;WORK
01100 B ← 2 ;WORK
01200 RET ← 3 ;RETURN ACCUMULATOR
01300 BUFSIZ ←=20224
01400 ↓DSKCHN ←1 ;DISK CHANNEL FOR INPUT
01500 ↓ADCHN ←2 ;D-A CHANNEL FOR OUTPUT
01600
01700 OPDEF READCH [51B8]
01800 OPDEF MESSAGE[51B8!3B12]
01900
02000 BEG: CALLI 0,0 ;RESET I/O DEVICES
02100 OPEN DSKCHN,[17 ;MODE
02200 'DSK ' ;DEVICE NAME
02300 0] ;NO BUFFER HEADERS
02400 HALT BEG ;RESTART IF DEVICE IS UNAVAILABLE
02500
02600 SETZM FILBLK+3 ;FOR RESTART
02700 SETZM FILBL2+3 ;FOR RESTART
02800 LX: MESSAGE [ASCIZ/
02900 TYPE `P' TO PLAY FROM DISK, `C' TO COPY TAPE TO DISK.
03000 /]
03100 readch a
03200 cain a,"C"
03300 jrst start
03400 caie a,"P"
03500 jrst lx
03600 skipe filblk+3 ;is this first time through ?
03700 jrst pla2 ;No. Parameters already set up.
03800 ;FIND OUT NUMBER OF CHANNELS AND
03900 ;THE SPEED.
04000
04100 MESSAGE [ASCIZ/HOW MANY CHANNELS?/]
04200 READCH A
04300 SUBI A,"0"+1 ;CONVERT TO BINR AND ADD 1
04400 DPB A,[POINT 2,OUTBIT,26]
04500
04600 MESSAGE [ASCIZ/WHAT IS THE SPEED?/]
04700 READCH A
04800 SUBI A,"0"
04900 DPB A,[POINT 3,OUTBIT,32]
05000
05100 PLA2: SETZM FILBLK+3
05200 SETZM FILBL2+3
05300 LOOKUP DSKCHN,FILBLK
05400 SKIPA ;CAN'T FIND MUSIC.MUS
05500 JRST XOPEN ;FOUND IT
05600 LOOKUP DSKCHN,FILBL2 ;TRY FOR MUSAA.DMD
05700
05800 JRST [MESSAGE[ASCIZ/
05900 *** MUSIC FILE NOT FOUND/]
06000 CALLI 12]
06100 ;EXIT IF FILE IS MISSING
06200 MOVE A,FILBL2+3 ;GET LENGTH OF MUSAA.DMD
06300 MOVEM A,FILBLK+3;PUT IT IN RIGHT PLACE
06400
06402 XOPEN: MOVSI 'XGP' ;DOWN TO XGPOK FOR XGP CONFLICT.
06412 DEVUSE 0,
06422 HLRZ 0,0
06432 CAIN 400000
06442 JRST XGPOK
06452 INIT 16,17
06462 SIXBIT .XGP.
06472 0
06482 JRA 16,2(16)
06500 XGPOK: OPEN ADCHN,[117 ;MODE
06600 'AD ' ;DEVICE NAME
06700 0] ;NO BUFFER HEADERS
06800
06900 JRST [MESSAGE[ASCIZ/
07000 ***D-A NOT AVAILABLE/]
07100 CALLI 12]
07200 ;EXIT IF D-A IS UNAVAILABLE
07300
07400 SPWAR: SPCWAR 17,[CALLI]
07500 MESSAGE [ASCIZ/ GO? /]
07600 READCH A
07700
07800
07900 LNTH: movs a,filblk+3 ;get length of file.
08000 movnm a,nwd
08100
08200 ; -----------------------------------------
08300
08400 ;BEGIN MAIN BODY OF PROGRAM
08500
08600 LOOP: JSP RET,SUB ;ROUTINE TO READ AND WRITE
08700 BUF1-1 ;USE BUF1 FOR THE I/O
08800 JUMPLE B,OUT ;DONE
08900
09000 JSP RET,SUB ;CALL IT AGAIN
09100 BUF2-1 ;USE BUF2 FOR THE I/O
09200 JUMPG B,LOOP ;GO BACK FOR MORE IF B>0
09300
09400 OUT: close dskchn, ;END OF PROGRAM.
09500 releas adchn,
09550 RELEASE 16,
09600 SPCWAR 0,'SSW'
09700 jrst lx
09800
09900 ;SUBROUTINE TO SET UP IOWD AND READ AND WRITE.
10000 ; 1(RET) WILL BE THE RETURN
10100 ; 0(RET) WILL BE THE ADDRESS OF THE BUFFER TO BE
10200 ; PUT IN THE RIGHT HALF OF THE IOWD.
10300 ; A WILL BE A WORK REGISTER
10400 ; B WILL BE TESTED ON THE OUTSIDE.
10500
10600 SUB: MOVNI A,BUFSIZ ;PICK UP AND COMPLEMENT BUFSIZ
10700 ADDB A,NWD ;A←NWD-BUFSIZ
10800 ;NWD←NWD-BUFSIZ
10900 MOVE B,A ;SAVE B TO BE TESTED FOR LAST
11000 ;TIME.
11100 JUMPL A,LAST ;SET UP FOR LAST TIME.
11200 MOVEI A,0
11300
11400 ;THE IOWD LOOKS LIKE:
11500 ; [-BUFSIZ / BUFI-1]
11600
11700 LAST: ADDI A,BUFSIZ
11800 MOVNS A ;COMPLEMENT A
11900 HRL A,0(RET) ;PICK UP BUFI AND MOVE IT
12000 ;TO THE LEFT SIDE OF A.
12100 MOVSM A,INLIST ;SWAP A AND MOVE IT.
12200 MOVSM A,OUTWC ;SAME FOR OUTPUT.
12300 INPUT DSKCHN,INLIST ;READ A RECORD.
12400 OUTPUT ADCHN,OUTWC ;WRITE THE RECORD.
12500 JRST 1(RET) ;RETURN
12600
12700 ; -----------------------------------------
12800
12900 ; STORAGE:
13000
13100 NWD: 0 ;FOR NUMBER OF WORDS OF INPUT.
13200 ↓BUF1: BLOCK BUFSIZ+1 ;BUFFER 1
13300 BUF2: BLOCK BUFSIZ+1 ;BUFFER 2
13400
13500 FILBLK: 'MUSIC ' ;FILENAME FOR INPUT
13600 'MUS ' ;EXTENSION
13700 0 ;INFORMATION ON FILE
13800 0 ;PROJECT PROG#
13900
14000 FILBL2: 'MUSAA ' ;FILENAME FOR INPUT, 2ND CHOICE
14100 'DMD ' ;EXTENSION
14200 0 ;INFORMATION ON FILE
14300 0 ;PROJECT PROG#
14400
14500 CLIST: IOWD 1,NWD ;FOR THE FIRST RECORD
14600 0
14700
14800 INLIST: 0 ;WILL CONTAIN AN IOWD
14900 0
15000
15100 OUTWC: 0 ;WILL CONTAIN AN IOWD FOR D-A
15200 3650 ;MAGIC BITS FOR 136.
15300 OUTBIT: 4000 ;BITS FOR D-A
15400 BLOCK 2
15500
15600 begin magdsk
15700
15800 A←1
15900 B←2
16000 D←3
16100 OLNG←=2432 ;size of mag tape records. must be multiple of =128.
16200
16300 ILNG←=2432
16400 ichn←adchn
16500 ochn←dskchn
16600 ↑START: CALLI 0
16700 INIT ICHN,3B28+17
16800 SIXBIT /MTA0/
16900 0
17000 HALT
17100 MTAPE ICHN,1 ;REWIND THE TAPE
17200 JFCL
17300 INIT OCHN,17
17400 SIXBIT /DSK/
17500 0
17600 HALT
17700 ENTER OCHN,[SIXBIT /MUSIC/
17800 SIXBIT /MUS/
17900 0
18000 0]
18100 HALT
18200 loop:input ichn,olst
18300 statz ichn,20000
18400 jrst out ;end of tape.
18500 output ochn,olst
18600 jrst loop
18700 OLST: IOWD OLNG,OBUF
18800 0
18900 obuf←← buf1
19000 bend magdsk
19100
19200 end beg